package com.bwt.sort;

import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;

public class SelectSort {
    public static void main(String[] args) {
        /*
        int[] arr = { 101, 34, 119, 1 };
        System.out.print("排序前:");
        System.out.println(Arrays.toString(arr));

        selectSort(arr); // 调用排序

        System.out.print("排序后:");
        System.out.println(Arrays.toString(arr));
        */


        //测试一下冒泡排序的速度:O(n^2),给80000个的数据,测试
        int[] arr = new int[80000];
        for(int i = 0;i < 80000;i++){
            arr[i] = (int)(Math.random() * 80000);	//自动生成[0,80000)之间的随机数
        }

        //排序前的时间:
        Date data = new Date();
        SimpleDateFormat simt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateS = simt.format(data);
        System.out.println("排序前的时间是:" + dateS);

        selectSort(arr); // 调用排序

        //排序后的时间:
        Date data2 = new Date();
        SimpleDateFormat simt2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateS2 = simt2.format(data2);
        System.out.println("排序后的时间是:" + dateS2);

        /*排序前的时间是:2022-07-10 00:11:14
        排序后的时间是:2022-07-10 00:11:25*/
    }

    public static void selectSort(int[] arr) {
        // 使用逐步推导的方式来,
        // 第1轮
        // 原始数组: 101, 34, 119, 1
        // 第一轮排序: 1, 34, 119, 101
        //算法  先简单 --> 再复杂, 就是把一个一个复杂的算法, 拆分成简单的问题 -> 逐步解决


        for (int i = 0; i < arr.length - 1; i++) {

            int minIndex = i;
            int min = arr[i];
            for (int j = i+1; j < arr.length; j++) {
                if (min > arr[j]) { // 说明假定最小值 并不是最小的
                    min = arr[j];
                    minIndex = j;
                }
            }
            if (minIndex != i) {
                arr[minIndex] = arr[i];
                arr[i] = min;
            }

        }

    /*    //第一轮
        int minIndex = 0;
        int min = arr[0];
        for (int j = 0+1; j < arr.length; j++) {
            if (min > arr[j]) { // 说明假定最小值 并不是最小的
                min = arr[j];
                minIndex = j;
            }
        }

        //将最小值和arrp[0] 交换
        if (minIndex != 0) {
            arr[minIndex] = arr[0];
            arr[0] = min;
        }

        minIndex = 1;
        min = arr[1];
        for (int j = 1+1; j < arr.length; j++) {
            if (min > arr[j]) { // 说明假定最小值 并不是最小的
                min = arr[j];
                minIndex = j;
            }
        }
        if (minIndex != 1) {
            arr[minIndex] = arr[1];
            arr[1] = min;
        }

        minIndex = 2;
        min = arr[2];
        for (int j = 2+1; j < arr.length; j++) {
            if (min > arr[j]) { // 说明假定最小值 并不是最小的
                min = arr[j];
                minIndex = j;
            }
        }
        if (minIndex != 2) {
            arr[minIndex] = arr[2];
            arr[2] = min;
        }*/
    }
}
